import * as svgCaptcha from "svg-captcha";

/**
 * 验证码工具类
 */
export class CaptchaUtils {
    /**
     * 生成验证码
     * @param type 验证码类型: txt: 字符验证码 math: 算术验证码
     * @param options 验证码配置
     * @returns 验证码对象
     * @example
     * {
     *    data: string; // svg 路径
     *    text: string; // 验证码文字或算术式的结果
     * }
     */
    static generateCaptcha(type: "txt" | "math" = "txt", options?: svgCaptcha.ConfigObject) {
        let captcha;
        const defaultOptions: svgCaptcha.ConfigObject = {
            // width: 100,
            // height: 40,
            // fontSize: 50,
            size: 4, // 验证码长度
            ignoreChars: "0o1i", // 验证码字符中排除 0o1i
            noise: 3, // 噪声线条的数量
            // background: "#cc9966", // 验证码图片背景颜色
            color: true // 验证码的字符是否有颜色，默认没有，如果设定了背景，则默认有
        };
        if (type === "txt") {
            captcha = svgCaptcha.create({ ...defaultOptions, ...options });
        } else {
            captcha = svgCaptcha.createMathExpr({ ...defaultOptions, ...options });
        }
        return captcha;
    }
}
